package com.auntvt.timo.jpax.core.quick.helper;

import com.auntvt.timo.jpax.core.quick.LambdaQuick;
import com.auntvt.timo.jpax.core.quick.Quick;
import com.auntvt.timo.jpax.core.quick.matcher.LambdaQuickMatcher;
import com.auntvt.timo.jpax.core.quick.matcher.QuickMatcher;

/**
 * Quick助手
 *
 * @author 小懒虫 <auntvt@163.com>
 * @date 2021/7/31
 */
public class QuickHelper {

    /**
     * 获取SimpleQuick对象
     *
     * @param <T> 对应表的实体类
     * @return Quick&lt;T&gt;
     */
    public static <T> Quick<T> query() {
        return new Quick<>();
    }

    /**
     * 获取SimpleQuick对象
     *
     * @param clazz 对应表的实体类
     * @param <T>   对应表的实体类
     * @return Quick&lt;T&gt;
     */
    public static <T> Quick<T> query(Class<T> clazz) {
        return new Quick<>();
    }

    /**
     * 获取LambdaQuick对象
     *
     * @param <T> 对应表的实体类
     * @return LambdaQuick&lt;T&gt;
     */
    public static <T> LambdaQuick<T> lambdaQuery() {
        return new LambdaQuick<>();
    }

    /**
     * 获取LambdaQuick对象
     *
     * @param clazz 对应表的实体类
     * @param <T>   对应表的实体类
     * @return LambdaQuick&lt;T&gt;
     */
    public static <T> LambdaQuick<T> lambdaQuery(Class<T> clazz) {
        return new LambdaQuick<>();
    }

    /**
     * 快速匹配
     *
     * @param entity 实体类对象
     * @return Matcher
     */
    public static <T> QuickMatcher<T> matching(T entity) {
        return new QuickMatcher<>(entity);
    }

    /**
     * 快速匹配
     *
     * @param clazz 对应表的实体类
     * @param bean  Bean对象
     * @return Matcher
     */
    public static <T> QuickMatcher<T> matching(Object bean, Class<T> clazz) {
        return new QuickMatcher<>(bean);
    }

    /**
     * 快速匹配
     *
     * @param entity 实体类对象
     * @return Matcher
     */
    public static <T> LambdaQuickMatcher<T> lambdaMatching(T entity) {
        return new LambdaQuickMatcher<>(entity);
    }

    /**
     * 快速匹配
     *
     * @param clazz 对应表的实体类
     * @param bean  Bean对象
     * @return Matcher
     */
    public static <T> LambdaQuickMatcher<T> lambdaMatching(Object bean, Class<T> clazz) {
        return new LambdaQuickMatcher<>(bean);
    }
}
